/*
 * Copyright 2006-2007 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
 
package asphalt2.util
{
	import flash.events.IEventDispatcher;
	import flash.utils.Dictionary;
	/**
	 * EventListener用ヘルパー
	 *
	 * @author c9katayama
	 */
	public class EventListenerHelper
	{
		private var listenerMap:Dictionary;
		
		/**
		 * EventDispatcherにイベントリスナーを追加します。
		 * removeAllEventListener()で全リスナーを対象から消します。
		 **/
		public function addEventListener(dispatcher:IEventDispatcher,eventType:String,listener:Function,useCapture:Boolean=false,priority:int=0,useWeakReference:Boolean=false):void{
			if(listenerMap==null){
				listenerMap = new Dictionary(true)
			}
			var listenerContainer:ListenerContainer = new ListenerContainer();
			listenerContainer.dispatcher = dispatcher;
			listenerContainer.eventType=eventType;
			listenerContainer.listener =listener;
			listenerMap[listenerContainer]=listenerContainer;			
			dispatcher.addEventListener(eventType,listener,useCapture,priority,useWeakReference);
		}
		/**
		 * このクラスを使用してaddしたEventListenerをすべてremoveします。
		 */
		public function removeAllEventListener():void{
			if(listenerMap != null){
				for each(var contaner:ListenerContainer in listenerMap){
					contaner.dispatcher.removeEventListener(contaner.eventType,contaner.listener);
					delete listenerMap[contaner];
				}
				listenerMap = null;
			}			
		}
	}
}
import flash.events.IEventDispatcher;
	
class ListenerContainer{
	public var eventType:String;
	public var dispatcher:IEventDispatcher;
	public var listener:Function;
}